package com.springboot.mail.conf;

import cn.dev33.satoken.jwt.StpLogicJwtForSimple;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpLogic;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * TODO 未做权限校验。
 * <p>
 * 自定义权限验证接口扩展。
 */
@Component    // 保证此类被SpringBoot扫描，完成Sa-Token的自定义权限验证扩展。
public class SaTokenConfig implements StpInterface {

//    @Resource
//    private LoginMapper loginMapper;
//    @Resource
//    private AdminLoginMapper adminLoginMapper;

    /**
     * 返回一个账号所拥有的权限码集合。
     * 登录后，每次请求都会被执行。
     * <p>
     * 注意：必须当token正确时，才会执行。
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
////        System.out.println("loginId = " + loginId);
////        System.out.println("loginType = " + loginType);
//
//        UserVO userVO = JSON.parseObject(loginId.toString(), UserVO.class);
//
//        System.out.println("当前的登录用户信息：==》 userVO = " + userVO);
//
//        // 权限
//        String jurisdiction = "";
//        // 是管理者。
//        if (userVO.getRole() == 0) {
//            AdminVO adminVO = JSON.parseObject(loginId.toString(), AdminVO.class);
//            AdminVO userInfoByName = adminLoginMapper.getUserInfoByName(adminVO.getAccount());
//            jurisdiction = userInfoByName.getJurisdiction();
//        } else {
//            UserVO userInfoById = loginMapper.getUserInfoById(userVO.getId());
//            jurisdiction = userInfoById.getJurisdiction();
//        }
//
//
//        // 空权限。
//        String[] jurisdictionList = new String[0];
//        if (!jurisdiction.isEmpty()) {
//            // 权限列表。
//            jurisdictionList = jurisdiction.split(";");
//        }
//        return new ArrayList<>(Arrays.asList(jurisdictionList));
        return null;
    }

    /**
     * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
//        // 本list仅做模拟，实际项目中要根据具体业务逻辑来查询角色
//        List<String> list = new ArrayList<String>();
//        list.add("admin");
//        list.add("super-admin");
//        return list;

        return new ArrayList<>();
    }

    /**
     * Sa-Token 整合 jwt (Simple 简单模式)
     * 登录数据存储	Redis中存储。
     * Session存储	Redis中存储。
     */

    @Bean
    public StpLogic getStpLogicJwt() {
        return new StpLogicJwtForSimple();
    }


}